#include <iostream>
#include <signal.h>
#include <unistd.h>

using namespace std;

// sig 参数，是由函数 signal 调用回调函数时传递的！
void catchSig(int sig){
    cout << "[ " << getpid() << "] > 执行了回调函数！同时接收到的信号为：" << sig << endl; 
}

int main(){

    // 注意：此时 捕捉了 2 号信号！
    // 2 号信号原意：终止！
    // 预测现象：键盘输入：ctrl + c 不会终止进程，出现的现象是：调用了：catchSig 函数
    signal(SIGINT, catchSig); // 注意：特定信号的处理动作，一般只有一个！
    // signal 函数，仅仅是修改了进程对特定信号的后续处理动作！不是直接调用对应的处理动作！
    // signal 函数：可以理解为：只是把特定的方法与特定的信号做关联！（而不是去调用方法）

#if 1
    // 测试核心转储用于调试
    int a = 10;
    a /= 0;

#endif

    // 一般情况下：后续会有很多处理逻辑，会给 signal 函数修改对特定信号的后续处理动作的一个执行时间！
    while(true){
        cout <<" [ " << getpid() << "] > 我是一个进程，站在执行任务！" << endl;
        sleep(1);
    }

    return 0;
}